package com.fitns.user.service.baseConfig;

import com.fitns.user.dao.baseConfig.SysDictDao;
import com.fitns.user.dto.baseConfig.SysDictDTO;
import com.fitns.user.dto.baseConfig.SysDictVO;
import com.fitns.user.exception.ServiceException;
import com.fitns.user.exception.SysDictMsgCode;
import com.fitns.user.service.user.UserService;
import com.github.pagehelper.PageInfo;
import com.xiaoleilu.hutool.lang.Validator;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

@Service
public class SysDictService {

	@Autowired
	private SysDictDao sysDictDao;

    @Autowired
    private UserService userService;

       /**
     * 新增
     * @param sysDictDTO
     * @return
     */
	public SysDictVO insert(SysDictDTO sysDictDTO){
        //新增字典 判断code是否重复
        if(sysDictDTO.getType()!=2L){
            SysDictDTO dictDTO = new SysDictDTO();
            dictDTO.setDictCode(sysDictDTO.getDictCode());
            dictDTO.setType(sysDictDTO.getType());
            List<SysDictVO> dictVOList = sysDictDao.selectList(dictDTO);
            if(Validator.isNotNull(dictVOList)||dictVOList.size()>0){
                throw ServiceException.create(SysDictMsgCode.SYS_DICT_CODE_IS_EXIST);
            }
        }
        SysDictVO dictVO = selectById(sysDictDTO.getParentId());
        String parentIds = dictVO.getParentIds()+dictVO.getId()+",";
        sysDictDTO.setParentIds(parentIds);
        //获取当前用户id
        Long userId = userService.currentUser().getId();
        sysDictDTO.setCreateId(userId);
        sysDictDTO.setModifyId(userId);
        //获取当前时间
        String nowDate=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
        Timestamp createDate=Timestamp.valueOf(nowDate);
        sysDictDTO.setInputTime(createDate);
        sysDictDTO.setModifyTime(createDate);
        sysDictDao.insert(sysDictDTO);
        SysDictVO sysDictVO = new SysDictVO();
        BeanUtils.copyProperties(sysDictDTO,sysDictVO);
        return sysDictVO;
	}

    /**
     * 修改
     * @param sysDictDTO
     * @return
     */
    @Transactional
    public SysDictVO modify(SysDictDTO sysDictDTO){
        //获取当前用户id
        Long userId = userService.currentUser().getId();
        sysDictDTO.setModifyId(userId);
        //获取当前时间
        String nowDate=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
        Timestamp modifyDate=Timestamp.valueOf(nowDate);
        sysDictDTO.setModifyTime(modifyDate);
        sysDictDao.modify(sysDictDTO);
        SysDictVO sysDictVO = new SysDictVO();
        BeanUtils.copyProperties(sysDictDTO,sysDictVO);
        return sysDictVO;
    }

    /**
     * 查询列表
     * @param sysDictDTO
     * @return
     */
    public PageInfo<SysDictVO> selectList(SysDictDTO sysDictDTO) {
        List<SysDictVO> sysDictVOList = sysDictDao.selectList(sysDictDTO);
        PageInfo<SysDictVO> pageInfo=new PageInfo<>(sysDictVOList);
        return pageInfo;
    }

    public SysDictVO selectById(Long id) {
        return sysDictDao.selectById(id);
    }

    /**
     * 查询某字典下的列表
     * @param sysDictDTO
     * @return
     */
    public List<SysDictVO> searchDict(SysDictDTO sysDictDTO) {
        List<SysDictVO> sysDictVOList = sysDictDao.selectList(sysDictDTO);
        return sysDictVOList;
    }

    /**
     * 删除
     * @param id
     * @return
     */
    public long delete(Long id){
        sysDictDao.delete(id);
        return id;
    }
}
